package chat

import (
	"context"
	"crypto/rand"
	"flag"
	"io"
	"log"

	"github.com/libp2p/go-libp2p/core/network"
)

var cache_maps map[string]network.Stream = map[string]network.Stream{}

// 入口文件
func Init() {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	dest := flag.String("d", "", "目标多地址字符串")
	flag.Parse()

	// 如果启用了调试，请使用常量随机源生成对等ID。仅对调试有用，默认情况下为关闭。否则，它将使用随机地址
	var r io.Reader = rand.Reader

	h, err := makeHost(0, r)
	if err != nil {
		log.Println(err)
		return
	}

	if *dest == "" {
		startPeer(ctx, h, handleStream)
	} else {
		rw, err := startPeerAndConnect(ctx, h, *dest)
		if err != nil {
			log.Println(err)
			return
		}

		// 创建一个线程来读取和写入数据。
		go writeData(rw)
		go readData(h.ID().Pretty(), rw)

	}

	// 永久性等待
	select {}
}
